 package com.example.brodcastreception0220;

import androidx.appcompat.app.AppCompatActivity;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.wifi.WifiManager;
import android.os.BatteryManager;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    /**
     * 广播分为两种方式，静态注册跟动态注册
     * 1.静态注册
     * 声明方式：在AndroidManifest_xml文件中通过<receive>来声明
     * 特点：不受组件任何生命周期的影响
     * 场景：需要时刻监听广播
     */

    /**
     * 2.动态注册
     * 使用方式：在代码中调用Context.registerReceiver()方法
     * 特点：非常驻，灵活，跟随组件的生命周期变化
     * 场景：需要特定时刻监听广播
     */

    /**发送广播
     广播的类型主要分为4类：
     。普通广播(Normal Broadcast)开发者自身定义intent的广播（最常用）
     ·系统广播(System Broadcast)Android中内置了多个系统广播
     ·有序广播(Ordered Broadcast)发送出去的广播被广播接收者按照先后顺序接收
     ·App应用内广播(Local Broadcast)一种局部广播，广播的发送者和接收者都同属于一个App(需要导包)
     (implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0')
     */

    /**
     * 监听网络变化
     * android.net.conn.CONNECTIVITY CHANGE
     * 关闭或打开飞行模式
     * Intent.ACTION AIRPLANE MODE CHANGED
     * 充电时或电量发生变化Intent..ACTION BATTERY CHANGED
     * 电池电量低
     * Intent.ACTION BATTERY LOW
     * 系统启动完成后（仅广播一次）
     * Intent.ACTION BOOT_COMPLETED
     * 屏幕锁屏
     * Intent.ACTION CLOSE SYSTEM DIALOGS
     * 成功安装APK
     * Intent.ACTION PACKAGE ADDED
     * 成功删除APK
     * Intent.ACTION PACKAGE REMOVED
     * 屏幕被关闭
     * Intent.ACTION SCREEN OFF
     */

    /**
     * 广播接收器注意事项
     * 对于不同注册方式的广播接收器回调OnReceive(Context context,Intent intent)中的context
     * 返回值是不一样的：
     * ·对于静态注册（全局+应用内广播），回调onReceive(context,intent)中的context返回值是：
     * ReceiverRestrictedContext;
     * ·对于全局广播的动态注册，▣调onReceive(context,intent)中的context返回值是：Activity
     * Context;
     * ·对于应用内广播的动态注册(LocalBroadcastManager方式)，回调onReceive(context,intent)
     * 中的context返回值是：Application Context。
     * 。对于应用内广播的动态注册（非LocalBroadcastManager方式），回调onReceive(context,
     * intent)中的context返回值是：Activity Context;
     * 激活近
     * 转到设置"
     */




    /**
     * 监听手机电量
     */
    private   TextView textView;

    private Button button;

    private static final String TAG ="MainActivity";

    private BroadcastReceiver receiver;

    public static  final String AAAAAAAA="com.example.brodcastre";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initview();//控件初始化
    }

    private void initview(){
        textView=findViewById(R.id.dianliang);
        button=findViewById(R.id.btn1);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                init();
            }
        });
    }

    @Override
    protected void onResume() {
        super.onResume();
        //sendreceiver();//监听电池电量变化
        //registReceiver();//发送wifi状态广播


    }

    @Override
    protected void onPause() {
        super.onPause();
        unregisterReceiver(receiver);
    }

    private void sendreceiver() {
        receiver=new batteryLeveReceiver();
        //收听的频道是电量变化
        IntentFilter intentFilter=new IntentFilter();
        //设置频道
        intentFilter.addAction(Intent.ACTION_BATTERY_CHANGED);
        //接收usb连接状态
        intentFilter.addAction(Intent.ACTION_GTALK_SERVICE_CONNECTED);

        intentFilter.addAction(Intent.ACTION_GTALK_SERVICE_DISCONNECTED);

        intentFilter.addAction(Intent.ACTION_BATTERY_LOW);

        intentFilter.addAction(AAAAAAAA);

        //注册广播
        this.registerReceiver(receiver,intentFilter);
    }

    /**
     * 1.创建一个广播接收者，继承自BroadcastReceiver
     */
    private class batteryLeveReceiver extends BroadcastReceiver {//接收电量广播

        //接收到广播，这个方法就会被回调
        @Override
        public void onReceive(Context context, Intent intent) {
            String action=intent.getAction();
            switch (action){
                case Intent.ACTION_BATTERY_CHANGED:{
                    Log.d(TAG,"接收到电量变化的广播-----"+action);
                    Log.d(TAG,"当前电量为-------------"+intent.getIntExtra(BatteryManager.EXTRA_LEVEL,0));
                    if (textView!=null){
                        textView.setText("当前电量为-------------"+intent.getIntExtra(BatteryManager.EXTRA_LEVEL,0));
                    }
                    break;
                }
                case Intent.ACTION_GTALK_SERVICE_CONNECTED:{
                    Log.d(TAG,"电源线已经连接");
                    break;
                }
                case Intent.ACTION_GTALK_SERVICE_DISCONNECTED:{
                    Log.d(TAG,"电源线已经断开");
                    break;
                }
                case Intent.ACTION_BATTERY_LOW:{
                    Toast.makeText(MainActivity.this,"电池电量低",Toast.LENGTH_SHORT).show();
                    break;
                }
                case AAAAAAAA:{
                    Toast.makeText(context, "广播已经收到", Toast.LENGTH_LONG).show();
                }
            }

        }
    }



    /**
     * 监控Wifi状态的广播接收器,注意不需要添加任何权限
     */
    public final class WifiStateReceiver extends BroadcastReceiver {//接收wifi状态
        private static final String TAG = "TagForWifiStateReceiver";

        @Override
        public void onReceive(Context c, Intent intent) {
            Bundle bundle = intent.getExtras();
            int statusInt = bundle.getInt("wifi_state");
            switch (statusInt) {
                case WifiManager.WIFI_STATE_UNKNOWN:
                    Log.i(TAG, "未知状态");
                    break;
                case WifiManager.WIFI_STATE_ENABLING:
                    Log.i(TAG, "wifi正在连接");
                    break;
                case WifiManager.WIFI_STATE_ENABLED:
                    Log.i(TAG, "wifi可用");
                    break;
                case WifiManager.WIFI_STATE_DISABLING:
                    Log.i(TAG, "wifi正在断开连接");
                    break;
                case WifiManager.WIFI_STATE_DISABLED:
                    Log.i(TAG, "wifi不可用");
                    break;
            }
        }
    }

    /**
     * 注册广播接收器
     */
    private void registReceiver() {
         receiver = new WifiStateReceiver();
        IntentFilter filter = new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION);
        registerReceiver(receiver, filter);
    }

    private void init(){
        Intent intent=new Intent();
        intent.setAction("com.example.brodcastre");
        sendBroadcast(intent);
    }
}